
*			  ==========================================
*						     Stata公开课 
*  
*                           软件及计量基础   
*             ==========================================

*                    	 主讲人：候丹丹
*                   	 主办方：连享会（www.lianxh.cn）
*           课程主页：https://gitee.com/lianxh/stataopen
*                     :: 课件下载，答疑等 ::

*			       ============================
*					 	 第二讲 数据处理   
*                  ============================

**-注意：执行后续命令之前，请先执行如下几条命令

  global Path 	"`c(sysdir_stata)'ado\personal\open2_data"  //定义课程路径 
  global D		"$Path\data"		//范例数据
  global Out  	"$Path\out"			//结果：图形和表格
  cd "$D"     
  set scheme s2color  //设定图形格式为默认格式
  
  *-note: 
  /*	`c(sysdir_stata)'是一个暂元，里面存放了Stata的安装路径：
	输入 sysdir 后显示的第一个文件路径。
	例如, 我的 stata17存放于D盘study文件下, 
	所以, `c(sysdir_stata)' = D:\study\Stata17\     	*/
	
	
  *_____________________________________
  *
  * ===== 学习过程遇到问题怎么办？====
  *_____________________________________
  *
  * ❓ 提问前，先用 -lianxh- 或 -songbl- 命令搜索相关资料和推文
      ssc install lianxh,replace
	  ssc install songbl,replace
      lianxh DID 倍分法
      songbl 面板
	  help lianxh
	  help songbl
  * ❓ 亦可，前往课程主页 https://gitee.com/arlionn/PX --> wiki 
  *   查看 FAQs，通常都能找到答案。 
  *
  
*----------------
*   本讲目录  
*----------------
* 2.1 数据的导入和导出
* 2.2 数据编辑和变量修改
* 2.3 数据列示和屏幕显示
* 2.4 Stata绘图
* 2.5 重复值处理
* 2.6 离群值处理













*			  ==========================================
*						Stata公开课 软件及计量基础   
*             ==========================================

*                    	 主讲人：候丹丹
*                   	 主办方：连享会（www.lianxh.cn）
*           课程主页：https://gitee.com/lianxh/stataopen
*                     :: 课件下载，答疑等 ::

*			       ============================
*					 	 第二讲 数据处理   
*                  ============================
*                     -2.1- 数据的导入和导出

*-2.1.1-  手动输入

	clear
	input x y z
         1 2 3
         4 5 6
	end
	save "mydata.dta", replace  // 保存数据
	save "E:\360MoveData\Users\msi-pc\Desktop\mydata.dta", replace  //指定具体存储路径
   
   
*-2.1.2-  txt数据   

	*	方法1	insheet		(*)
	shellout "d1.txt"  // -tab-键分隔的数据
	insheet using "d1.txt", clear
	
	shellout "d2.txt"   //以,分隔的数据
	insheet using "d2.txt", clear
	
	shellout "d21.txt"   //以空格分隔的数据
	insheet using "d21.txt", clear 
	insheet using "d21.txt", clear delimiter(" ")    //需要通过 delimiter 选项指定“分隔符号”
    infile v1 v2 v3 using "d21.txt", clear  //空格 
	
	*	方法2	复制粘贴
	clear
	shellout "d1.txt"
	edit
	
	*	可能出现的报错
		* command shellout is unrecognized  
		* 解决办法 ssc install outreg2
		* Mac用户shellout需要替换为 ! open "d1.txt"

		
*-2.1.3-  Excel数据  

	*	方法1	import excel	(*)
	shellout "auto.xls"
	import excel "auto.xls", sheet(domestic) firstrow  clear
	save "data_domes.dta", replace  //存储数据 sheet1
  
	import excel "auto.xls", sheet(foreign)  firstrow clear 
	save "data_forei.dta", replace  //存储数据 sheet2
	
	*	方法2	菜单栏 文件-->导入
	
	*	方法3	复制粘贴
	clear
	shellout "auto.xls"
	edit  //等价于Ctrl+8快捷键
	
	
*-2.1.4-  Stata数据	

	*	方法1	调入系统数据	(*)
	sysuse auto.dta,clear

	*	方法2	调入Stata官方网站保存的数据
	webuse usmacro2.dta,clear
	
	*	方法3	调入当前工作路径下的数据	(*)
	dir *.dta            		//查找以.dta格式的文件
	use xtcs.dta, clear  
	
	*	方法4	调入绝对路径下的dta数据
	use "E:\360MoveData\Users\msi-pc\Desktop\mydata.dta", clear
	
	*	方法5	从指定网站读取数据（很少用）
    webuse set "https://gitee.com/arlionn/stata_training/raw/master/Data/"
    webuse GTA_basic.dta, clear  
    webuse set  //恢复默认设定
  * (prefix now "http://www.stata-press.com/data/r15")

  
*-2.1.5-  数据导出
	*	导出为excel数据
	export excel using auto1.xlsx, replace first(variables) //导出第一行为变量名
	export excel using auto2.xlsx, replace first(varlabels)  //第一行为变量标签
	
	*	导出为txt数据
	export delimited using "auto11.txt", replace  //以,分割的txt数据
	export delimited using "auto22.txt", delimiter(tab) replace  //以tab键分割的txt数据
	
   *----------
   *-扩展阅读
   *-Stata小白系列之一：调入数据
	view browse "https://www.lianxh.cn/news/f54f16013a7ff.html"

	
	
	
	
	
	
	
	
	
	
	
	
	
	
*			  ==========================================
*						Stata公开课 软件及计量基础   
*             ==========================================

*                    	 主讲人：候丹丹
*                   	 主办方：连享会（www.lianxh.cn）
*           课程主页：https://gitee.com/lianxh/stataopen
*                     :: 课件下载，答疑等 ::

*			       ============================
*					 	 第二讲 数据处理   
*                  ============================
*                     -2.2- 数据编辑和变量修改


*-2.2.1-  数据编辑
	sysuse nlsw88, clear
	ed	 // edit
	br	 // browse 
	drop age-grade // 删除特定的变量
	drop in 1/10	// 删除特定的观测值
	keep age-grade   // 保留特定变量
	keep in 1/10	// 保留特定的观测值
	format wage ttl_exp %5.2f   //定义数据显示格式
	
	
*-2.2.2-  变量生成
    *	generate
	sysuse sp500, clear
	tsset date
	gen t = _n		//序号
	gen y = (open[_n]-open[_n-1])/open[_n-1]	
	gen n = _N		//样本总量
	
	gen lnhigh = ln(high)
	gen round_high = round(high)	//取整数
	
	gen Dhigh = D.high       //差分
	gen Lhigh  = L1.high		//滞后一阶
	gen L2high = L2.high	//滞后二阶
	edit *high
	
	*	egen  更强大的函数功能
	use "工企数据节选2.dta", clear	
	egen id=group(法人单位代码)		//生成id
	egen count2=count(id), by(id)		//计算频数
	edit id count* 法人单位代码 year 原始单位名称

	sysuse nlsw88,clear
	egen wagesum=sum(wage)  //求和
	egen wagemedian=median(wage)  //中位数
	egen wagemax=max(wage)     //最大值
	egen wagemax3=max(wage), by(race)  //相同种族内的最高工资
	sort race
	edit wage* race
	
	*	generate 和 egen 的区别
	sysuse auto, clear
	gen y1=sum(price)	//求列累计和
	egen y2=sum(price)	//求列总和
	edit price y1 y2
	
	*-Stata：产生唯一数据编码的三种方法
	view browse "https://www.lianxh.cn/news/89fd938a93026.html"
	*-Stata数据处理：各种求和方式一览
	view browse "https://www.lianxh.cn/news/3ce33ba6750a7.html"
	

*-2.2.3-  修改变量名称
 
	*	变量命名的规则
		help varname 
		* (1) 由英文字母、数字或 _ 组成，至多不超过 32 个字符；
		* (2) 首字母必须为 字母 或 _ ；
		* (3) 英文字母的大写和小写具有不同的含义；
	*	示例：  
		* (1) 合理变量名: roa, abc_1, a1, Gdp_growth
		* (2) 非法变量名: 5gdp 2invest 
	*	特别注意：
		*  建议不要使用 "_" 作为变量的第一个字母，
		*  因为许多stata的内部变量都是以 _ 开头的，
		*  如，_n, _N, _cons, _b 等等。
		
	sysuse auto, clear
	des2
	rename make manufacturer	//单个重命名
	rename (price weight length) (y x1 x2) //批量重命名
	
	
	*	关于变量名称是中文的情况
	rename (y x1 x2) (汽车价格 重量 长度)
	reg 汽车价格 重量 长度
	est sto m1
	esttab m1 using aa.rtf, nogap replace

	
*-2.2.4-  修改变量标签
	sysuse auto, clear
	des
	label var price "汽车价格($)"
	label var rep78 "维修次数"
	des          //查看效果

	
*-2.2.5-  修改变量值标签
	sysuse auto, clear
	des2
	*-Step1: label define, 定义标签内容
	label define repair 1 "很好" 2 "较好" 3 "中等" 4 "较差" 5 "很差"
	*-Step2: label value, 将变量与标签内容关联起来
	label value  rep78 repair
    des2           //建议采用这种方式, 简洁
    tab rep78

	
   *----------
   *-扩展阅读
	lianxh 变量
	*-连享会·数据处理专题·推文
	view browse "https://www.lianxh.cn/blogs/25.html"
	*-普林斯顿stata教程(一) - stata数据处理
    view browse "https://www.lianxh.cn/news/c98db865ea7fb.html"

   

	


	







*			  ==========================================
*						Stata公开课 软件及计量基础   
*             ==========================================

*                    	 主讲人：候丹丹
*                   	 主办方：连享会（www.lianxh.cn）
*           课程主页：https://gitee.com/lianxh/stataopen
*                     :: 课件下载，答疑等 ::

*			       ============================
*					 	 第二讲 数据处理   
*                  ============================
*                     -2.3- 数据列示和屏幕显示

*-2.3.1-  数据列示
	sysuse "auto", clear
	sort price 		//升序排列
	sort foreign price
	order foreign, after(price)
	gsort -price	//降序排列

	
*-2.3.2-  屏幕显示	
	display "差旅费 = " 1450*2 + 360*3  //计算器功能
	
	sysuse "auto", clear
	list price wei len mpg make
	list price foreign in 40/60, sepby(foreign) //屏幕列示观察值 
	cls           //清屏
	clear         //清空内存中的数据和变量标签，但矩阵等不受影响
	clear all     //清空内存中的所有内容

	
	
	
	
	
	
	
	
	
	
	
	
	
*			  ==========================================
*						Stata公开课 软件及计量基础   
*             ==========================================

*                    	 主讲人：候丹丹
*                   	 主办方：连享会（www.lianxh.cn）
*           课程主页：https://gitee.com/lianxh/stataopen
*                     :: 课件下载，答疑等 ::

*			       ============================
*					 	 第二讲 数据处理   
*                  ============================
*                         -2.4- Stata绘图	
	

	sysuse "nlsw88.dta", clear
	set scheme s1mono
*-2.4.1-  直方图
	histogram wage,freq  //频率分布直方图
	histogram wage,normal	//附加正态分布密度曲线
	histogram wage, by(collgrad)  ///
	     gap(80) scheme(s1mono) percent   //分组绘制直方图
	graph save "$Out\histogram.gph", replace
	
	
*-2.4.2-  密度函数图
	kdensity  wage    
	twoway (kdensity wage if union==1)  ///
           (kdensity wage if union==0), ///
			legend(label(1 "Union") label(2 "Non-Union"))   //分样本绘图
	mkdensity wage, over(union)  //外部命令，很好用
	graph save "$Out\kdensity.gph", replace
	
	
*-2.4.3-  散点图
	twoway scatter wage ttl_exp, msymbol(Oh) msize(*0.9) //散点图
	twoway (scatter wage ttl_exp) (lfit wage ttl_exp) //散点图+线性拟合图  
	graph save "$Out\scatter.gph", replace
	
	
*-2.4.4-  线图
	sysuse sp500, clear
	twoway line high date	//折线图
	twoway (line high date) (line low date)
	graph save "$Out\line.gph", replace
	
		#d ;
	   twoway (line high date) (line low date),     
       title("图1：股票最高价与最低价时序图", box)   //图形标题
       xtitle("交易日期", margin(medsmall))          //x轴标题
       ytitle("股票价格")                            //y轴标题
       ylabel(900(200)1400) ymtick(##5)              //y轴刻度标签
	   xlabel(,angle(20))                            //x轴刻度标签
       legend(col(1) ring(0) position(7))            //图例
       note("资料来源：Stata公司，SP500.dta")       
       caption("说明：我做的第一幅Stata图形！")     
	   saving("mypig.gph", replace);                       //存储图片
	    #d cr
	
*-更多漂亮图形的绘制方法及命令
	lianxh stata绘图  
	*-普林斯顿stata教程(二) - stata绘图
    view browse "https://www.lianxh.cn/news/64495e9c4801c.html"

		 		 

	
	
  

  

	
	
	
	
	
	
   
*			  ==========================================
*						Stata公开课 软件及计量基础   
*             ==========================================

*                    	 主讲人：候丹丹
*                   	 主办方：连享会（www.lianxh.cn）
*           课程主页：https://gitee.com/lianxh/stataopen
*                     :: 课件下载，答疑等 ::

*			       ============================
*					 	 第二讲 数据处理   
*                  ============================
*                         -2.5- 重复值处理	

*-2.5.1-  检查重复的样本组合
	use "invest3.dta", clear
	xtset id t

	duplicates report		//显示重复次数
	duplicates list			//展示重复值
	

*-2.5.2 删除重复的样本组合
	duplicates drop id t, force  //一定要附加 force 选项
	xtset id t

*-2.5.3 标记重复的样本组合   
	use "工企数据节选2.dta", clear
	egen id=group(法人单位代码)	
	order id , first
	xtset id year
	duplicates report id year
	duplicates list	id year
	duplicates drop id year, force		//造成样本量减少和样本组合错误
	

	duplicates tag id year, gen(tag1)		//标记重复值
	order tag1 , after(year)
	
	gen idyear=string(id) +	string(year) 	//生成组合编码
	egen count=count (idyear), by(idyear)		//标记重复样本及重复次数


*-更多好用的命令
	lianxh 重复值
	













*			  ==========================================
*						Stata公开课 软件及计量基础   
*             ==========================================

*                    	 主讲人：候丹丹
*                   	 主办方：连享会（www.lianxh.cn）
*           课程主页：https://gitee.com/lianxh/stataopen
*                     :: 课件下载，答疑等 ::

*			       ============================
*					 	 第二讲 数据处理   
*                  ============================
*                         -2.6- 离群值处理	

*-2.6.1-  离群值对回归的影响

	sysuse "auto.dta", clear
	reg price weight length foreign
	est store r1
	reg price weight length foreign if price<13000
	est store r2
	esttab r1 r2, mtitle("with" "without") nogap

*-2.6.2-  离群值的处理

    *-2.6.2.1 删除     
	
	sysuse "auto.dta", clear  // 需要提前安装-egenmore-相关命令
	egen outby = outside(price), by(foreign) factor(2)
	br price foreign outby
	drop if outby != .
	  
  
	*-2.6.2.2 对数转换
	
	sysuse "nlsw88.dta", clear
	histogram wage, normal     // normal 选项的作用是什么?
	gen ln_wage = ln(wage)
	histogram ln_wage, normal

	*-2.6.2.3 缩尾处理
	/* 通常在1%和99%分位做极端值处理，
	对于小于1%的数用1%的值赋值，
	对于大于99%的数用99%的值赋值。*/
	
	sysuse "nlsw88.dta", clear
	histogram wage
	winsor  wage, gen(wage_w2) p(0.01)
	winsor2 wage, cuts(1 99)  replace
	histogram wage_w2
	
	*-winsor2：离群值和异常值的缩尾处理
	view browse "https://www.lianxh.cn/news/29b1139efd0bb.html"
	
	*-2.6.2.4 截尾处理
	
	sysuse "nlsw88.dta", clear
	winsor2 wage, trim replace  //默认: 1 99 双边截尾

	*Stata：离群值！离群值？离群值!
	view browse "https://www.lianxh.cn/news/6fd920ed55bf0.html"
	
   *----------
   *-更多数据处理的小窍门
   *-连享会·数据处理专题·推文
	view browse "https://www.lianxh.cn/blogs/25.html"
   *-直播课：Stata 数据清洗之实战操作（二）
    view browse "https://www.lianxh.cn/news/57869f51cf328.html"








